package com.example.order_system.util;

import cn.hutool.core.util.IdUtil;
import cn.hutool.crypto.SecureUtil;
import org.springframework.util.StringUtils;

/**
 * @description: 密码加盐加密
 * @author: chengbaiyi
 * @create: 2022-08-27 15:35
 */
public class PasswordUtil {
    /**
     * 加密（加盐）
     * @param password 原密码
     * @return 加密后密码
     */
    public static String encrypt(String password) {
        // 随机盐值
        String salt = IdUtil.simpleUUID();
        // 密码（md5(随机盐值+密码)）
        String finalPassword = SecureUtil.md5(salt + password);
        return salt + '$' + finalPassword;
    }

    /**
     * 解密
     * @param password 待验证的密码（未加密）
     * @param securePassword 数据库中加密的密码
     * @return 是否相等
     */
    public static boolean decrypt(String password, String securePassword) {
        if (StringUtils.hasLength(password) && StringUtils.hasLength(securePassword)) {
            if (securePassword.length() == 65 && securePassword.contains("$")) {
                String[] securePasswordStr = securePassword.split("\\$");
                // 盐值
                String salt = securePasswordStr[0];
                String finalPassword = securePasswordStr[1];
                // 使用相同的加密算法和盐值生成最终加密的密码
                password = SecureUtil.md5(salt + password);
                return finalPassword.equals(password);
            }
        }
        return false;
    }
}
